package com.price.sample.http.interceptor

import android.content.Context
import com.price.common.extend.logWarn
import okhttp3.Interceptor
import okhttp3.Response
import java.io.IOException

class TokenOutInterceptor : Interceptor {

    private val lock = Any()

    @kotlin.jvm.Throws(IOException::class)
    override fun intercept(chain: Interceptor.Chain): Response {
        val response = chain.proceed(chain.request())
        logWarn("response code ${response.code}")
        return if (response.code == 401) {//401 token失效
//            try {
            //同步防止并发 请求刷新token
            synchronized(lock) {
                refreshToken()
            }
            //使用新的Token，创建新的请求
//                val userBean = LoginUser.getData()
//                val newRequest = chain.request()
//                    .newBuilder()
//                    .header("Token", userBean?.Token?.Token ?: "")
//                    .build()

            if (!response.isSuccessful) {
                response.close(); // 很简单，加上这一句
            }
            //再次请求
//            val newRequest=chain.request().newBuilder()
//                .removeHeader("Token")
//                .addHeader("Token", "")
//                .build()
//            chain.proceed(newRequest)
            chain.proceed(chain.request())
//            } catch (ex: Exception) {
//                response
//            }
        } else {
            response
        }
    }


    /**
     * 同步请求刷新Token
     */
    private fun refreshToken() {

//        val appContext = BaseApplication.context
//
//        val data = com.price.common.util.SharedUtils.instance.get(Config.Key_LOGIN_UP, "").split(",")
//        if(data.isEmpty() || data.size<2){
//            toLogin(appContext)
//            return
//        }
//        val loginBody = LoginBody(data[0], data[1])
//        val requestBody = RetrofitUtil.convertToRequestBody(loginBody)
//
//
//
//        val request = Request.Builder()
//            .url(Config.BaseUrl + "/api/Identify/GetToken")
//            .addHeader("Lang", com.price.common.util.SharedUtils.instance.get(Config.Key_LANGUAGE, "1"))//header添加根据自己项目需要
//            .addHeader("IMEI", DeviceIdUtil.getDeviceId(appContext))
//            .post(requestBody)
//            .build()
//        val call = OkHttpClient.Builder().build().newCall(request)
//
//        val response = call.execute()
//        val result = response.body?.string()
//
//        LogUtil.e("TokenInterceptor", "getToken Back:code=${response.code}  $result")
//        when (response.code) {
//            200 -> {
//                val tokenBean: Token = Gson().fromJson(result, Token::class.java)
//                //保存最新token
//                val loginUser = LoginUser.getData()
//                loginUser?.Token = tokenBean
//                LoginUser.setUser(loginUser)
//            }
//
//            else -> {
//                toLogin(appContext)
//            }
//        }
    }

    private fun toLogin(context:Context) {
        //刷新token失败，或者RefreshToken 以及token都失效，就重新登录app
//        LoginUser.setUser(null)
//        //如果是普通的activity话 可以直接跳转，如果是navigation中的fragment，可以发送通知跳转
//        appContext.startActivity(Intent(context, LoginActivity::class.java).apply {
//            flags = Intent.FLAG_ACTIVITY_NEW_TASK
//        })

    }
}
